﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <ctype.h>
#include <errno.h>



//int main()
//{
//	int a = 0x11223344;
//	return 0;
//}

//char* my_strstr(char* str1, char* str2)
//{
//	char* cp = str1;
//	char* s1 = cp;
//	char* s2 = str2;
//	while (*cp)
//	{
//		//开始匹配
//		s1 = cp;
//		s2 = str2;
//		while (*s1 && *s2 && *s1 == *s2)
//		{
//			s1++;
//			s2++;
//		}
//		//匹配成功
//		if (*s2 == '\0')
//			return cp;
//		cp++;
//	}
//	return NULL;
//}
//
//int main()
//{
//	char arr1[] = { "abbbcdef" };
//	char arr2[] = { "bbc" };
//	char* ret = my_strstr(arr1, arr2);
//	if (ret != NULL)
//		printf("%s\n", ret);
//	else
//		printf("找不到\n");
//	return 0;
//}

//int main()
//{
//	FILE* pFile;
//	pFile = fopen("unexist.ent", "r");
//	if (pFile == NULL)
//		perror("Error opening file unexist.ent");
//	return 0;
//}

//int main()
//{
//	FILE* pFile;
//	pFile = fopen("unexist.ent", "r");
//	if (pFile == NULL)
//		printf("Error opening file unexist.ent: %s\n", strerror(errno));
//	return 0;
//}

//我们打印⼀下0~10这些错误码对应的信息
//int main()
//{
//	int i = 0;
//	for (i = 0; i <= 10; i++) {
//		printf("%2d = %s\n",i, strerror(i));
//	}
//	return 0;
//}

//int main()
//{
//	char arr[] = "192.168.6.111";
//	char* sep = ".";
//	char* str = NULL;
//	for (str = strtok(arr, sep); str != NULL; str = strtok(NULL, sep))
//	{
//		printf("%s\n", str);
//	}
//	return 0;
//}

//int main()
//{
//	const char* str1 = "abcdef";
//	const char* str2 = "bbb";
//	if (strlen(str2) - strlen(str1) > 0)
//	{
//		printf("str2>str1\n");
//	}
//	else
//	{
//		printf("srt1>str2\n");
//	}
//	return 0;
//}

//int main()
//{
//	int i = 0;
//	char str[] = "Test String.\n";
//	char c;
//	while (str[i])
//	{
//		c = str[i];
//		if (islower(c))
//			c -= 32;
//		putchar(c);//打印一个字符
//		i++;
//	}
//	return 0;
//}


////strstr使用
//int main()
//{
//	char arr[] = { "This is a simple string" };
//	char* pch;
//	pch = strstr(arr, "simple");
//	strncpy(pch, "sample", 6);
//	printf("%s", arr);
//	return 0;
//}

////strncmp使用
//int main()
//{
//	char arr1[] = { "abcdef" };
//	char arr2[] = { "abbq" };
//	int ret = strncmp(arr1, arr2, 3);
//	printf("%d", ret);
//	return 0;
//}

////strncat使用
//int main()
//{
//	char arr1[20] = { "abcdef" };
//	char arr2[] = { "abcde" };
//	strncat(arr1, arr2, 4);
//	printf("%s", arr1);
//	return 0;
//}

////strncpy使用
//int main()
//{
//	char arr1[10] = { "abcdef" };
//	char arr2[] = { "xxxx" };
//	strncpy(arr1, arr2, 3);
//	printf("%s", arr1);
//	return 0;
//}

//优化
//int my_strcmp(const char* p1, const char* p2)
//{
//	while (*p1 == *p2)
//	{
//		if (*p1 == '\0')
//		{
//			return 0;
//		}
//		p1++;
//		p2++;
//	}
//	return *p1 - *p2;
//}
//
//int my_strcmp2(const char* p1, const char* p2)
//{
//	while (*p1 == *p2)
//	{
//		if (*p1 == '\0')
//		{
//			return 0;
//		}
//		p1++;
//		p2++;
//	}
//	if (*p1 > *p2)
//		return 1;
//	else
//		return -1;
//}
//
//strcmp模拟实现
//int main()
//{
//	char arr1[] = { "abc" };
//	char arr2[] = { "abcd" };
//	int ret = my_strcmp(arr1, arr2);
//	printf("%d\n", ret);
//	return 0;
//}

//strcmp使用
//int main()
//{
//	char arr1[] = { "abcdef" };
//	char arr2[] = { "abcd" };
//	int ret = strcmp(arr1, arr2);
//	printf("%d\n", ret);
//	return 0;
//}


//int main()
//{
//	char arr[] = { "abcd" };
//	strcat(arr, arr);
//	printf("%s", arr);
//	return 0;
//}

////优化
//char* my_strcat2(char* p1, const char* p2)
//{
//	char* tmp = p1;
//	while (*p1 != '\0')
//	{
//		p1++;
//	}
//	while ((*p1++ = *p2++))
//	{
//		;	
//	}
//	return tmp;
//}
//
//char* my_strcat(char* p1, const char* p2)
//{
//	char* tmp = p1;
//	while (*p1 != '\0')
//	{
//		p1++;
//	}
//	while (*p2 != '\0')
//	{
//		*p1 = *p2;
//		p1++;
//		p2++;
//	}
//	return tmp;
//}
//
////strcat模拟实现
//int main()
//{
//	char arr1[20] = { "hello " };
//	char arr2[] = { "world" };
//	char* ret = my_strcat(arr1, arr2);
//	printf("%s", ret);
//	return 0;
//}

////strcat使用
//int main()
//{
//	char arr1[20] = { "hello " };
//	char arr2[] = { "world" };
//	strcat(arr1, arr2);
//	printf("%s", arr1);
//	return 0;
//}

//优化
//char* my_strcpy1(char* dest, const char* str)
//{
//	char* tmp = dest;
//	assert(dest && str);
//	while((*dest++ = *str++))
//	{
//		;
//	}
//	return tmp;
//}
//
//const char* my_strcpy(char* dest, const char* str)
//{
//	const char* tmp = dest;
//	assert(dest && str);
//	while (*str != '\0')
//	{
//		*dest = *str;
//		dest++;
//		str++;
//	}
// *dest = *str;
//	return tmp;
//}
//
////strcpy模拟实现
//int main()
//{
//	char arr1[] = { "abcdef" };
//	char arr2[20] = { 0 };
//	char* ret = my_strcpy(arr2, arr1);
//	printf("%s", ret);
//	return 0;
//}

////strcpy使用
//int main()
//{
//	char arr1[] = { "abcdef" };
//	char arr2[20] = { 0 };
//	strcpy(arr2, arr1);
//	printf("%s", arr2);
//	return 0;
//}

//计数器
//int my_strlen(const char* str)
//{
//	int count = 0;
//	while (*str != '\0')
//	{
//		count++;
//		str++;
//	}
//	return count;
//}

//指针-指针
//int my_strlen(const char* str)
//{
//	const char* tmp = str;
//	while (*str != '\0')
//	{
//		str++;
//	}
//	return str - tmp;
//}

//递归
//int my_strlen(const char* str)
//{
//	if (*str == 0)
//		return 0;
//	else
//		return 1 + my_strlen(str + 1);
//}
//
//strlen模拟实现
//int main()
//{
//	char arr[] = { "abcdef" };
//	int str = my_strlen(arr);
//	printf("%d\n", str);
//	return 0;
//}

//strlen使用
//int main()
//{
//	char arr[] = { "abcdef" };
//	int str = strlen(arr1);
//	printf("%d\n", str);
//	return 0;
//}